package com.anzia.pagejump.slice;

import com.anzia.pagejump.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.Button;
import ohos.agp.components.Text;

public class MainAbilitySlice extends AbilitySlice {

	private Text text_main;

	@Override
	public void onStart(Intent intent) {
		super.onStart(intent);
		super.setUIContent(ResourceTable.Layout_ability_main);

		/**
		 * 同Page跳转
		 */
		// 第一个按钮：实现基本的跳转
		// 通过xml布局文件中的组件ID获取组件
		Button btn_1 = (Button) findComponentById(ResourceTable.Id_btn_1);
		// 设置按钮点击监听事件，在点击时进行如下操作
		btn_1.setClickedListener(component -> {    // lambda表达式
			Intent btn_1_intent = new Intent();    // Intent：意图，是对象之间传递信息的载体
			// 通过present进行跳转操作
			/**
			 * 参数说明
			 * new FirstAbilitySlice()：表示要跳转到的slice
			 * btn_1_intent：把信息载体作为参数传到对应slice中
			 */
			present(new FirstAbilitySlice(), btn_1_intent);
		});

		// 第二个按钮：实现带参数跳转；可以边跳转边传值改变内容
		Button btn_2 = (Button) findComponentById(ResourceTable.Id_btn_2);
		btn_2.setClickedListener(component -> {
			Intent btn_2_intent = new Intent();
			btn_2_intent.setParam("data", "鸿蒙，你好");    // 设置参数，形式是K:V结构，存在intent中
			present(new SecondAbilitySlice(), btn_2_intent);
		});

		// 第三个按钮：实现带返回值跳转；可以通过校验返回值，在onResult中实现校验通过后的其他行为
		text_main = (Text) findComponentById(ResourceTable.Id_text_main);
		Button btn_3 = (Button) findComponentById(ResourceTable.Id_btn_3);
		btn_3.setClickedListener(component -> {
			Intent btn_3_intent = new Intent();
			// 这是使用的是presentForResult()进行跳转，最后一个参数是请求代码，用于返回时校验
			presentForResult(new ThirdAbilitySlice(), btn_3_intent, 666);
		});


		/**
		 * 不同Page跳转
		 */
		// 推荐使用这种方法实现！使用OperationBuilder()方法实现
		Button btn_4 = (Button) findComponentById(ResourceTable.Id_btn_4);
		btn_4.setClickedListener(component -> {
			Intent btn_4_intent = new Intent();
			Operation operation = new Intent.OperationBuilder()
					.withDeviceId("")    // 设备Id，在本地上进行跳转可以为空，跨设备进行跳转则需要传入值
					.withBundleName("com.anzia.pagejump")    // 包名
					.withAbilityName(".SecondAbility")    // Ability页面的名称，在本地可以缺省前面的路径
					.build();    // 构建代码
			btn_4_intent.setOperation(operation);    // 将operation存入到intent中
			startAbility(btn_4_intent);    // 实现Ability跳转
		});

		// 不推荐这个，挺麻烦的
		// 先去config.json中添加对应的action
		// 在Ability文件添加addActionRoute()路由
		// 在Slice文件中组件的监听事件设置跳转方法
		Button btn_5 = (Button) findComponentById(ResourceTable.Id_btn_5);
		btn_5.setClickedListener(component -> {
			Intent btn_5_intent = new Intent();
			btn_5_intent.setAction("abilityslice2");
			startAbility(btn_5_intent);
		});

	}

	@Override
	protected void onResult(int requestCode, Intent resultIntent) {
		super.onResult(requestCode, resultIntent);
		// 如果请求代码校验通过，则执行一下的操作
		if (requestCode == 666) {
			// 获取pwd的值
			String pwd = resultIntent.getStringParam("pwd");
			// 在pwd的值，添加到原文本的后面
			text_main.append(" 密码：" + pwd);
		}
	}

	@Override
	public void onActive() {
		super.onActive();
	}

	@Override
	public void onForeground(Intent intent) {
		super.onForeground(intent);
	}
}
